package com.example.admin.service.impl;

import com.example.admin.service.IPayService;
import com.lly835.bestpay.enums.BestPayPlatformEnum;
import com.lly835.bestpay.enums.BestPayTypeEnum;
import com.lly835.bestpay.model.PayRequest;
import com.lly835.bestpay.model.PayResponse;
import com.lly835.bestpay.service.impl.BestPayServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
@Service
public class PayService implements IPayService {
    @Autowired
    private BestPayServiceImpl bestPayService;

    /**
     * 发起支付 并写入数据库
     * @param orderId
     * @param amount
     * @return
     */
    @Override
    public PayResponse create(String orderId, BigDecimal amount, BestPayTypeEnum bestPayTypeEnum, String goodsName) {

        /**待处理内容：
         * 下单前写入数据库,需要步骤将订单号金额等信息存入数据库
         * System.out.println("支付状态："+OrderStatusEnum.NOTPAY.name());
         * System.out.println("订单号："+Long.parseLong(orderId));
         * System.out.println("支付类型");
         * System.out.println("支付金额:"+amount);
         */
        PayRequest request = new PayRequest();
        request.setOrderId(orderId);
        request.setOrderName(goodsName);
        request.setOrderAmount(amount.doubleValue());
        request.setPayTypeEnum(bestPayTypeEnum);
        PayResponse response = bestPayService.pay(request);
        return response;
    }

    /**
     * 处理回调信息
     * @param notifyData
     * @return
     */
    @Override
    public String asyncNotify(String notifyData) {
        PayResponse response = bestPayService.asyncNotify(notifyData);/*校验签名*/
        if (response.getPayPlatformEnum() == BestPayPlatformEnum.WX) {/*判断回调 如果是微信支付*/
                /**待处理内容：
                 * 金额校验 （从数据库查订单信息）    response.getOrderAmount()
                 * 修改订单支付状态
                 * 交易流水号  response.getOutTradeNo()
                 */
                return "<xml>\n" +  /*返回给微信告诉微信不需要通知了*/
                        "  <return_code><![CDATA[SUCCESS]]></return_code>\n" +
                        "  <return_msg><![CDATA[OK]]></return_msg>\n" +
                        "</xml> ";
        } else if (response.getPayPlatformEnum() == BestPayPlatformEnum.ALIPAY) {/*判断回调 如果是支付宝支付*/
                /**待处理内容：
                 * 金额校验 （从数据库查订单信息）    response.getOrderAmount()
                 * 修改订单支付状态
                 * 交易流水号   response.getOutTradeNo()
                 */
                return "success"; /*返回给支付宝告诉支付宝不需要通知了*/
        }
        return null;
    }
}
